home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-02
/
pascala.zip
/
QUIXCOM.PAS
< prev
next >
Wrap
Pascal/Delphi Source File
|
1991-05-09
|
4KB
|
129 lines
(* Stop recursion after size is 10 and use insertion sort *)
PROGRAM Compsorts(Input,Output,File1);
mscs55 #7b compare quick sorts.}
CONST MaxSize = 8192;
TYPE ArrayType = ARRAY[0..MaxSize] OF Integer;
VAR B,C,D: ArrayType;
StartTime, EndTime, Size: Integer;
File1: Text;
(*********************************************************)
(* QuickSort-- Recursive version with drag *)
(*********************************************************)
PROCEDURE QuickSort (VAR A: ArrayType; Size:Integer);
PROCEDURE Sort(L,R: Integer);
VAR Temp, I, J, BegginValue: Integer;
X,Logme: Integer;
Log: Real;
BEGIN
I:= L;
J:= R;
BegginValue:= A[(L+R) DIV 2];
REPEAT
WHILE A[I] < BegginValue DO (* Search from left *)
I:= I+1;
WHILE A[J] > BegginValue DO (* Search from right *)
J:= J-1;
IF I<=J THEN
BEGIN
(* Drag Intoduced *)
For X := 1 to 20 Do
BEGIN
LogMe := A[I + J] + X;
Log := ln(Logme);
END;
(* Drag Concluded *)
Temp:= A[I];
A[I]:= A[J];
A[J]:= Temp;
I:= I+1;
J:= J-1;
END;
UNTIL I >= J;
IF L < J THEN Sort(L,J);
IF I < R THEN Sort(I,R);
END; (* Sort *)
BEGIN
Sort(1, Size);
END;
(*********************************************************)
(* QuickSort-- Recursive version till reaches a *)
(* certain size. *)
(*********************************************************)
PROCEDURE ReviseQuix(VAR A: ArrayType; Size:Integer);
PROCEDURE RevSort(L,R: Integer);
VAR Temp, I, J, BegginValue,Pass,
Z,S: Integer;
BEGIN
I:= L;
J:= R;
IF (L+R) > 10 THEN (* if the remaining list is greater than *)
(* a certain size do quicksort *)
(* else do insertion sort *)
BEGIN (* Quicksort *)
BegginValue:= A[(L+R) DIV 2];
REPEAT
WHILE A[I] < BegginValue DO (* Search from left *)
I:= I+1;
WHILE A[J] > BegginValue DO (* Search from right *)
J:= J-1;
IF I<=J THEN
BEGIN
Temp:= A[I];
A[I]:= A[J];
A[J]:= Temp;
I:= I+1;
J:= J-1;
END;
UNTIL I >= J;
IF L < J THEN RevSort(L,J);
IF I < R THEN RevSort(I,R);
END (* Quicksort *)
ELSE
FOR Pass:= L TO R DO (* Insert item 'Pass' *)
BEGIN
Z:= Pass;
S:= A[Pass]; (* Copy item to be inserted *)
WHILE S < A[Z-1] DO
BEGIN
A[Z]:= A[Z-1]; (* Move item down in list *)
Z:= Z-1;
END;
A[Z]:= S; (* Perform Insertion *)
END;
END; (* Sort *)
BEGIN
RevSort(1, Size);
END;
BEGIN (******************* MAIN ***********************)
Reset(File1);
B[0]:= 0; (* Bumper for top of list *)
Size:= 0;
WHILE not Eof(File1) DO
BEGIN
Size:= Size + 1;
Readln(File1,B[Size]);
END;
C:= B; D:= B;
Writeln('Array Size: ',Size:0);
Writeln;
StartTime:= Clock;
QuickSort (C, Size);
EndTime:= Clock;
Writeln('QuickTime with drag: ',EndTime-StartTime:0);
StartTime := Clock;
ReviseQuix(D, Size);
EndTime:=Clock;
Writeln('Revised QuickTime: ',EndTime-StartTime:0);
END. (**************** COMPSORTS **********************)